// 本文件由gen_static_data_code生成
// 请遵照提示添加修改！！！

import TplLoader from "../core/TplLoader";
{{range .Tables}}import { Table{{.Name}}{{if .Attributes}}, Table{{.Name}}Global{{end}} } from "./{{.RawName}}.sd";
{{end}}
{{range .Enums}}import { {{.Name}} } from './enums.sd';
{{end}}
//////////////////////////////////////////////////////////////////////////////////////////////////
// TODO 添加头部扩展代码
//<Head>{{.GetExtendContent "Head"}}//</Head>
//////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * 静态表管理类
 */
export default class TableManager {
    {{range .Tables}}{{$TableName := .Name}}{{$TableRawName := .RawName}}private static {{.RawName}} = new Array<Table{{.Name}}>();
    {{range .UniqueIndexes}}private static {{$TableRawName}}By{{.Name}}: { [key: {{ToTypeScriptKeyType .Type}}]: Table{{$TableName}} } = {};{{end}}
    {{range .NormalIndexes}}private static {{$TableRawName}}By{{.Name}}: { [key: {{ToTypeScriptKeyType .Type}}]: Array<Table{{$TableName}}> } = {};{{end}}{{end}}

    public static init() {
        let self = this;
        //////////////////////////////////////////////////////////////////////////////////////////////////
        {{range .Tables}}self.load{{.Name}}();
        {{end}}//////////////////////////////////////////////////////////////////////////////////////////////////
        // TODO 添加加载代码
        //<Table>{{.GetExtendContent "Table"}}//</Table>
        //////////////////////////////////////////////////////////////////////////////////////////////////
        TplLoader.Instance.close();
    }
    {{range .Tables}}{{$TableName := .Name}}{{$TableRawName := .RawName}}
    private static load{{$TableName}}(){
        let self = this;
        let jsonName = "json/{{$TableRawName}}.json";
        let data = TplLoader.Instance.LoadTplArray(jsonName);
        if (data.table) {
            let tableData = data.table;
            for (let i = 0; i < tableData.length; i++) {
                let obj = tableData[i];
                let one = new Table{{$TableName}}();
                one.init(obj);
                self.{{$TableRawName}}.push(one);
            }
        }
        {{if or (.UniqueIndexes) (.NormalIndexes)}}
        for(let i = 0; i < self.{{$TableRawName}}.length; i++){
            let ele = self.{{$TableRawName}}[i];

            {{range .UniqueIndexes}}self.{{$TableRawName}}By{{.Name}}[ele.{{.Name}}] = ele;{{end}}

            {{range .NormalIndexes}}if(!self.{{$TableRawName}}By{{.Name}}[ele.{{.Name}}]){
                self.{{$TableRawName}}By{{.Name}}[ele.{{.Name}}] = new Array<Table{{$TableName}}>()
            }
            self.{{$TableRawName}}By{{.Name}}[ele.{{.Name}}].push(ele);{{end}}
        }{{end}}

        {{if .Attributes}}let globalData = data.global;
        for (let key in globalData) {
            if (globalData.hasOwnProperty(key)) {
                Table{{$TableName}}Global[key] = globalData[key];
            }
        }{{end}}
    }

    {{range .UniqueIndexes}}public static Get{{$TableName}}By{{.Name}}({{.RawName}}: {{ToTypeScriptKeyType .Type}}): Table{{$TableName}} {
        let self = this;
        if (self.{{$TableRawName}}By{{.Name}}[{{.RawName}}]) {
            return self.{{$TableRawName}}By{{.Name}}[{{.RawName}}]
        }
        return null
    }{{end}}

    {{range .NormalIndexes}}public static Get{{$TableName}}sBy{{.Name}}({{.RawName}}: {{ToTypeScriptType .Type}}): Array<Table{{$TableName}}> {
        let self = this;
        if (self.{{$TableRawName}}By{{.Name}}[{{.RawName}}]) {
            return self.{{$TableRawName}}By{{.Name}}[{{.RawName}}]
        }
        return null
    }{{end}}
    {{end}}

    //////////////////////////////////////////////////////////////////////////////////////////////////
    // TODO 添加管理类扩展代码
    //<Global>{{.GetExtendContent "Global"}}//</Global>
    //////////////////////////////////////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////////////////////
// TODO 添加尾部扩展代码
//<Tail>{{.GetExtendContent "Tail"}}//</Tail>
//////////////////////////////////////////////////////////////////////////////////////////////////
